package edu.up.controle;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import edu.up.beans.ClienteBean;
import edu.up.beans.FornecedorBean;
import edu.up.beans.RelatoriosBean;
import edu.up.beans.SonhoBean;
import edu.up.beans.SonhoPersonalizadoBean;
import edu.up.connection.ConnectionDB;

public class Relatorios {
	public Relatorios() {
		System.out.println("Construtor Relatorios");
	}

	public ConnectionDB con = new ConnectionDB();

	public ArrayList<RelatoriosBean> listaRelatorio(String tipo, Object obj,
			String dtI, String dtF) {
		Connection cn = null;
		Statement st = null;
		ResultSet rs = null;
		String dtIni = dtI;
		String dtFim = dtF;
		String nome = null;

		ArrayList<RelatoriosBean> lista = new ArrayList<RelatoriosBean>();

		if (tipo.equals("fornecedores")) {
			try {
				cn = con.connect();

				String sql = "select id as id, " + "nome as nome, endereco as endereco, numero as numero, cep as cep, cidade as cidade, estado as estado, contato as contato, complemento as complemento, cnpj as cnpj, telefone as telefone from fornecedores";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean bean = new RelatoriosBean();
					FornecedorBean fornecedor = new FornecedorBean();
					fornecedor.setId(Integer.valueOf(rs.getString("id")));
					fornecedor.setNome(rs.getString("nome"));
					fornecedor.setEndereco(rs.getString("endereco"));
					fornecedor.setNumero(rs.getString("numero"));
					fornecedor.setCep(rs.getString("cep"));
					fornecedor.setCidade(rs.getString("cidade"));
					fornecedor.setEstado(rs.getString("estado"));
					fornecedor.setContato(rs.getString("contato"));
					fornecedor.setComplemento(rs.getString("complemento"));
					fornecedor.setCnpj(rs.getString("cnpj"));
					fornecedor.setTelefone(rs.getString("telefone"));
					bean.setFornecedor(fornecedor);
					lista.add(bean);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("fornecedorFiltro")) {
			try {
				cn = con.connect();
				FornecedorBean f = (FornecedorBean) obj;
				String sql = "select id as id, nome as nome, endereco as endereco, numero as numero, cep as cep, cidade as cidade, estado as estado, contato as contato, complemento as complemento, cnpj as cnpj, telefone as telefone from fornecedores where UPPER(nome) like UPPER('%"+f.getNome()+"%')";

				// Buscar Alunos
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean bean = new RelatoriosBean();
					FornecedorBean fornecedor = new FornecedorBean();
					fornecedor.setId(Integer.valueOf(rs.getString("id")));
					fornecedor.setNome(rs.getString("nome"));
					fornecedor.setEndereco(rs.getString("endereco"));
					fornecedor.setNumero(rs.getString("numero"));
					fornecedor.setCep(rs.getString("cep"));
					fornecedor.setCidade(rs.getString("cidade"));
					fornecedor.setEstado(rs.getString("estado"));
					fornecedor.setContato(rs.getString("contato"));
					fornecedor.setComplemento(rs.getString("complemento"));
					fornecedor.setCnpj(rs.getString("cnpj"));
					fornecedor.setTelefone(rs.getString("telefone"));
					bean.setFornecedor(fornecedor);
					lista.add(bean);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("vendas")) {
			try {
				cn = con.connect();

				ClienteBean bean = (ClienteBean) obj;

				String sql = "select vendas.id_vendas as id, cliente.nome as nome, sonhos.lugar as lugar, sonhos.data as data, sonhos.descricao as descricao, sonhos.valor as valor from cliente join vendas on (vendas.id_user = cliente.id) join sonhos on (sonhos.id_sonhos = vendas.id_sonho) where vendas.id_user = "
						+ bean.getId()
						+ " and cliente.id = "
						+ bean.getId()
						+ ";";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean vendas = new RelatoriosBean();
					String listaVendas[] = new String[6];
					listaVendas[0] = String.valueOf(Integer.valueOf(rs.getString("id")));
					listaVendas[1] = rs.getString("nome");
					listaVendas[2] = rs.getString("lugar");
					listaVendas[3] = rs.getString("data");
					listaVendas[4] = rs.getString("descricao");
					listaVendas[5] = rs.getString("valor");
					vendas.setVendas(listaVendas);
					lista.add(vendas);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("vendasTotal")) {
			try {
				cn = con.connect();

				String sql = "select vendas.id_vendas as id, cliente.nome as nome, sonhos.lugar as lugar, sonhos.data as data, sonhos.descricao as descricao, sonhos.valor as valor from cliente join vendas on (vendas.id_user = cliente.id) join sonhos on (sonhos.id_sonhos = vendas.id_sonho) ;";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean vendas = new RelatoriosBean();
					String listaVendas[] = new String[6];
					listaVendas[0] = String.valueOf(Integer.valueOf(rs.getString("id")));
					listaVendas[1] = rs.getString("nome");
					listaVendas[2] = rs.getString("lugar");
					listaVendas[3] = rs.getString("data");
					listaVendas[4] = rs.getString("descricao");
					listaVendas[5] = rs.getString("valor");
					vendas.setVendas(listaVendas);
					lista.add(vendas);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("vendasFiltro")) {
			try {
				cn = con.connect();

				ClienteBean bean = (ClienteBean) obj;
				// dd/MM/yyyy
				// 0123456789
				String ano = dtIni.substring(6, dtIni.length());
				String mes = dtIni.substring(3, 5);
				String dia = dtIni.substring(0, 2);

				String anoF = dtFim.substring(6, dtIni.length());
				String mesF = dtFim.substring(3, 5);
				String diaF = dtFim.substring(0, 2);

				dtIni = ano + "-" + mes + "-" + dia;
				dtFim = anoF + "-" + mesF + "-" + diaF;

				String sql = "select vendas.id_vendas as id, cliente.nome as nome, sonhos.lugar as lugar, "
						+ " sonhos.data as data, sonhos.descricao as descricao, sonhos.valor as valor "
						+ " from cliente "
						+ " join vendas on (vendas.id_user = cliente.id) "
						+ " join sonhos on (sonhos.id_sonhos = vendas.id_sonho and sonhos.data between '"
						+ dtIni
						+ "' and '"
						+ dtFim
						+ "')"
						+ " where cliente.id = " + bean.getId();

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean vendas = new RelatoriosBean();
					String listaVendas[] = new String[6];
					listaVendas[0] = String.valueOf(Integer.valueOf(rs.getString("id")));
					listaVendas[1] = rs.getString("nome");
					listaVendas[2] = rs.getString("lugar");
					listaVendas[3] = rs.getString("data");
					listaVendas[4] = rs.getString("descricao");
					listaVendas[5] = rs.getString("valor");
					vendas.setVendas(listaVendas);
					lista.add(vendas);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("vendasFiltroTotal")) {
			try {
				cn = con.connect();

				ClienteBean bean = (ClienteBean) obj;
				// dd/MM/yyyy
				// 0123456789
				String ano = dtIni.substring(6, dtIni.length());
				String mes = dtIni.substring(3, 5);
				String dia = dtIni.substring(0, 2);

				String anoF = dtFim.substring(6, dtIni.length());
				String mesF = dtFim.substring(3, 5);
				String diaF = dtFim.substring(0, 2);

				dtIni = ano + "-" + mes + "-" + dia;
				dtFim = anoF + "-" + mesF + "-" + diaF;

				String sql = "select vendas.id_vendas as id, cliente.nome as nome, sonhos.lugar as lugar, "
						+ " sonhos.data as data, sonhos.descricao as descricao, sonhos.valor as valor "
						+ " from cliente "
						+ " join vendas on (vendas.id_user = cliente.id) "
						+ " join sonhos on (sonhos.id_sonhos = vendas.id_sonho and sonhos.data between '"
						+ dtIni + "' and '" + dtFim + "')";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean vendas = new RelatoriosBean();
					String listaVendas[] = new String[6];
					listaVendas[0] = String.valueOf(Integer.valueOf(rs.getString("id")));
					listaVendas[1] = rs.getString("nome");
					listaVendas[2] = rs.getString("lugar");
					listaVendas[3] = rs.getString("data");
					listaVendas[4] = rs.getString("descricao");
					listaVendas[5] = rs.getString("valor");
					vendas.setVendas(listaVendas);
					lista.add(vendas);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} 
		// Inicio
		else if (tipo.equals("depoimentos")) {
			try {
				cn = con.connect();

				ClienteBean bean = (ClienteBean) obj;

				String sql = "select id_depoimento as id, cliente as cliente, data as data, sonho as sonho, depoimento as depoimento, nota as nota from depoimentos; ";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean depoimentos = new RelatoriosBean();
					String listaDepoimentos[] = new String[6];
					listaDepoimentos[0] = rs.getString("id");
					listaDepoimentos[1] = rs.getString("cliente");
					listaDepoimentos[2] = rs.getString("data");
					listaDepoimentos[3] = rs.getString("sonho");
					listaDepoimentos[4] = rs.getString("depoimento");
					listaDepoimentos[5] = String.valueOf(Integer.valueOf(rs.getString("nota")));
					depoimentos.setDepoimentos(listaDepoimentos);
					lista.add(depoimentos);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("depoimentosTotal")) {
			try {
				cn = con.connect();

				String sql = "select id_depoimento as id, cliente as cliente, data as data, sonho as sonho, depoimento as depoimento, nota as nota from depoimentos; ";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean depoimentos = new RelatoriosBean();
					String listaDepoimentos[] = new String[6];
					listaDepoimentos[0] = rs.getString("id");
					listaDepoimentos[1] = rs.getString("cliente");
					listaDepoimentos[2] = rs.getString("data");
					listaDepoimentos[3] = rs.getString("sonho");
					listaDepoimentos[4] = rs.getString("depoimento");
					listaDepoimentos[5] = String.valueOf(Integer.valueOf(rs.getString("nota")));
					depoimentos.setDepoimentos(listaDepoimentos);
					lista.add(depoimentos);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("depoimentosFiltro")) {
			try {
				cn = con.connect();

				ClienteBean bean = (ClienteBean) obj;
				// dd/MM/yyyy
				// 0123456789
				String ano = dtIni.substring(6, dtIni.length());
				String mes = dtIni.substring(3, 5);
				String dia = dtIni.substring(0, 2);

				String anoF = dtFim.substring(6, dtIni.length());
				String mesF = dtFim.substring(3, 5);
				String diaF = dtFim.substring(0, 2);

				dtIni = ano + "-" + mes + "-" + dia;
				dtFim = anoF + "-" + mesF + "-" + diaF;
				
				String sql = "select id_depoimento as id, cliente as cliente, data as data, sonho as sonho, depoimento as depoimento, nota as nota from depoimentos where data between '" + dtIni+ "' and '"+ dtFim+ "'";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean depoimentos = new RelatoriosBean();
					String listaDepoimentos[] = new String[6];
					listaDepoimentos[0] = rs.getString("id");
					listaDepoimentos[1] = rs.getString("cliente");
					listaDepoimentos[2] = rs.getString("data");
					listaDepoimentos[3] = rs.getString("sonho");
					listaDepoimentos[4] = rs.getString("depoimento");
					listaDepoimentos[5] = String.valueOf(Integer.valueOf(rs.getString("nota")));
					depoimentos.setDepoimentos(listaDepoimentos);
					lista.add(depoimentos);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("depoimentosFiltroTotal")) {
			try {
				cn = con.connect();

				ClienteBean bean = (ClienteBean) obj;
				// dd/MM/yyyy
				// 0123456789
				String ano = dtIni.substring(6, dtIni.length());
				String mes = dtIni.substring(3, 5);
				String dia = dtIni.substring(0, 2);

				String anoF = dtFim.substring(6, dtIni.length());
				String mesF = dtFim.substring(3, 5);
				String diaF = dtFim.substring(0, 2);

				dtIni = ano + "-" + mes + "-" + dia;
				dtFim = anoF + "-" + mesF + "-" + diaF;

				String sql = "select id_depoimento as id, cliente as cliente, data as data, sonho as sonho, depoimento as depoimento, nota as nota from depoimentos where data between '" + dtIni+ "' and '"+ dtFim+ "')";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean depoimentos = new RelatoriosBean();
					String listaDepoimentos[] = new String[6];
					listaDepoimentos[0] = rs.getString("id");
					listaDepoimentos[1] = rs.getString("cliente");
					listaDepoimentos[2] = rs.getString("data");
					listaDepoimentos[3] = rs.getString("sonho");
					listaDepoimentos[4] = rs.getString("depoimento");
					listaDepoimentos[5] = String.valueOf(Integer.valueOf(rs.getString("nota")));
					depoimentos.setDepoimentos(listaDepoimentos);
					lista.add(depoimentos);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("sonhosFiltro")) {
			try {
				cn = con.connect();
				// dd/MM/yyyy
				// 0123456789
				String ano = dtIni.substring(6, dtIni.length());
				String mes = dtIni.substring(3, 5);
				String dia = dtIni.substring(0, 2);

				String anoF = dtFim.substring(6, dtIni.length());
				String mesF = dtFim.substring(3, 5);
				String diaF = dtFim.substring(0, 2);

				dtIni = ano + "-" + mes + "-" + dia;
				dtFim = anoF + "-" + mesF + "-" + diaF;

				String sql = "SELECT ID_SONHOS AS id, DATA AS data, LUGAR AS lugar, VALOR AS valor, DESCRICAO AS descricao, FORNECEDOR AS forn, TIPO AS tipo FROM SONHOS where data between '"+ dtIni + "' and '" + dtFim + "'";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean bean = new RelatoriosBean();
					SonhoBean sonho = new SonhoBean();
					sonho.setId(Integer.valueOf(rs.getString("id")));
					sonho.setData(rs.getString("data"));
					sonho.setDescricao(rs.getString("descricao"));
					sonho.setFornecedor(rs.getString("forn"));
					sonho.setLugar(rs.getString("lugar"));
					sonho.setTipo(rs.getString("tipo"));
					sonho.setValor(rs.getString("valor"));
					bean.setSonho(sonho);
					lista.add(bean);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (tipo.equals("sonhos")) {
			try {
				cn = con.connect();

				String sql = "SELECT ID_SONHOS AS id, DATA AS data, LUGAR AS lugar, VALOR AS valor, DESCRICAO AS descricao, FORNECEDOR AS forn, TIPO AS tipo FROM SONHOS";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean bean = new RelatoriosBean();
					SonhoBean sonho = new SonhoBean();
					sonho.setId(Integer.valueOf(rs.getString("id")));
					sonho.setData(rs.getString("data"));
					sonho.setDescricao(rs.getString("descricao"));
					sonho.setFornecedor(rs.getString("forn"));
					sonho.setLugar(rs.getString("lugar"));
					sonho.setTipo(rs.getString("tipo"));
					sonho.setValor(rs.getString("valor"));
					bean.setSonho(sonho);
					lista.add(bean);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else if (tipo.equals("sonhosPersonalizados")) {
			try {
				cn = con.connect();

				String sql = "select email as email, data as data, lugar as lugar, tipo as tipo, descricao as descricao from sonhos_personalizados";

				// Buscar
				st = cn.createStatement();
				rs = st.executeQuery(sql);

				while (rs.next()) {
					RelatoriosBean bean = new RelatoriosBean();
					SonhoPersonalizadoBean sonho = new SonhoPersonalizadoBean();
					sonho.setEmail(rs.getString("email"));
					sonho.setData(rs.getString("data"));
					sonho.setDescricao(rs.getString("descricao"));
					sonho.setLugar(rs.getString("lugar"));
					sonho.setTipo(rs.getString("tipo"));
					bean.setSonhoPersonalizado(sonho);
					lista.add(bean);
				}

				System.out.println(sql);
				cn.close();

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else
			if (tipo.equals("sonhosPersonalizadosFiltro")) {
				try {
					cn = con.connect();
					String ano = dtIni.substring(6, dtIni.length());
					String mes = dtIni.substring(3, 5);
					String dia = dtIni.substring(0, 2);

					String anoF = dtFim.substring(6, dtIni.length());
					String mesF = dtFim.substring(3, 5);
					String diaF = dtFim.substring(0, 2);

					dtIni = ano + "-" + mes + "-" + dia;
					dtFim = anoF + "-" + mesF + "-" + diaF;
					String sql = "select email as email, data as data, lugar as lugar, tipo as tipo, descricao as descricao from sonhos_personalizados where data between '"+dtIni+"' and '"+dtFim+"'";

					// Buscar
					st = cn.createStatement();
					rs = st.executeQuery(sql);

					while (rs.next()) {
						RelatoriosBean bean = new RelatoriosBean();
						SonhoPersonalizadoBean sonho = new SonhoPersonalizadoBean();
						sonho.setEmail(rs.getString("email"));
						sonho.setData(rs.getString("data"));
						sonho.setDescricao(rs.getString("descricao"));
						sonho.setLugar(rs.getString("lugar"));
						sonho.setTipo(rs.getString("tipo"));
						bean.setSonhoPersonalizado(sonho);
						lista.add(bean);
					}

					System.out.println(sql);
					cn.close();

				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		return lista;
	}
}
